#include<string>
#include<iostream>
#include<vector>
using namespace std;
class DataBlock {
public:
    int* data;
    static const int blockSize = 1000;
    string str;

    DataBlock(string s) :data(new int[blockSize]) {
        this->str = s;
        cout << str << " Constructor being invoked!" << endl;
    }

    // Complete copy
    DataBlock(const DataBlock& db) :data(new int[blockSize]) {
        this->str = db.str;
        for (int i = 0; i < blockSize; i++) {
            this->data[i] = db.data[i];
        }

        cout << str << " Copy Constructor being invoked!" << endl;
    }
    // Move Constructor
    DataBlock(DataBlock&& db) {
        this->data = db.data;
        db.data = nullptr;
        cout << str << " Move Constructor being invoked!" << endl;
    }
    ~DataBlock() {
        cout << str << " Destructor being invoked!" << endl;
        if (this->data != nullptr) {
            delete[] data;
            data = nullptr;
        }
    }
};

struct Test {
    int a = 4;
    int aa;
    int b = 0;
};

int main() {

    cout << sizeof Test << endl;

    vector<DataBlock> dbVec;
    dbVec.push_back(DataBlock("First"));

	string str = "12345";
	string target = "236";
	auto index = str.find(target);
	cout << (index == string::npos) << endl;

	//int& a = 1l;
	int a = 11;
	int& b = a;
	int&& c = std::move(b);
	const int& aza = 1;
}